package main

import (
	"bufio"
	"encoding/json"
	"gin-filestore/config"
	dblayer "gin-filestore/model"
	"gin-filestore/mq"
	"gin-filestore/store/oss"
	"log"
	"os"
)

// ProcessTransfer : 处理文件转移的真正逻辑
func ProcessTransfer(msg []byte) bool {
	//1.解析msg
	log.Println(string(msg))

	pubData := mq.TransferData{}
	err := json.Unmarshal(msg, &pubData)
	if err != nil {
		log.Println(err.Error())
		return false
	}

	//2.根据临时存储文件路径，创建文件句柄
	filed, err := os.Open(pubData.CurLocation)
	if err != nil {
		log.Println(err.Error())
		return false
	}

	//3.通过文件句柄将文件内容读出来并且上传到OSS
	err = oss.Bucket().PutObject(
		pubData.DestLocation,
		bufio.NewReader(filed))
	if err != nil {
		log.Println(err.Error())
		return false
	}

	//4.更新文件的存储路径到文件表
	suc := dblayer.UpdateFileLocation(
		pubData.FileHash,
		pubData.DestLocation)
	if !suc {
		return false
	}

	return true
}

func main() {
	if !config.DefaultConfig.AsyncTransferEnable {
		log.Println("异步转移文件功能目前被禁用，请检查相关配置")
		return
	}
	log.Println("文件转移服务启动中，开始监听转移任务队列...")

	// 初始化mq client
	mq.InitMq()
	mq.StartConsume(
		config.DefaultConfig.TransOSSQueueName,
		config.DefaultConfig.TransExchangeName,
		ProcessTransfer)
}
